package monster.comm.database;

import java.util.Hashtable;
import java.util.List;

import javax.sql.DataSource;

import sun.jdbc.rowset.CachedRowSet;

import monster.comm.exception.ServiceException;
/**
* 这是一个对jdbc的封装接口，所有的jdbc请尽量使用此类
* jsoft.com.util.JdbcTemplatService
*/
public interface JdbcTemplatService {
	
	/**
	   * 得到数据库连接池
	   * @return
	   * @throws ServiceException
	   */
	  public DataSource getDS() throws ServiceException;
  /**
   * 执行指定的增、删、改SQL语句
   * @param sql 增、删、改SQL语句
   */
  public void update(String sql) throws ServiceException;


  /**
   * 执行指定的增、删、改SQL准备语句
   * @param sql 增、删、改SQL准备语句
   * @param params 参数
   */
  public void updateByParam(String sql, final Object[] params) throws
      ServiceException;

  /**
   * 得到指定查询语句的记录集
   * @param sql 普通查询语句
   * @return CachedRowSet
   */
  public CachedRowSet findRowSet(String sql) throws ServiceException;

  /**
   * 得到指定准备语句的查询记录集
   * @param sql 查询准备语句
   * @param arg 条件参数
   * @return CachedRowSet
   */
  public CachedRowSet findRowSetByParam(String sql, Hashtable arg) throws
      ServiceException;

  /**
   * 得到指定准备语句的查询记录集总条数
   * @param sql 查询准备语句
   * @param arg 条件参数
   * @return int 记录总条数
   */
  public int findRowCount(String sql, Hashtable arg) throws ServiceException;

  /**
   * 得到指定页的记录
   * @param sql 查询的准备语句
   * @param arg 查询的参数对象集合
   * @param rowscount 查询语句查询出的总记录数
   * @param pageIndex 第几页
   * @param pageSize 每页显示条数
   * @return CachedRowSet
   */
  public CachedRowSet findRowset(String sql, Hashtable arg, int rowscount,
                                 int pageIndex, int pageSize) throws
      ServiceException;
  
  /**
   * 从一条sql语句里面获得一个vo对象的list集合
   * @param sql eg:select * from test
   * @param voClass  对应vo的class类,
   * @param dataField 这个要注意，就是从ResulSet里面取出字段填充进vo的属性值，里面数组的大小写和属vo属性名的大小写要保持一致,如果vo的属性名集合<=resultSet包含的字段
   * 则把这个dataFields设置为null
   * @return vo对象的list集合
   * @throws ServiceException
   */
  public List queryListBySql(String sql, Class voClass, String[] dataFields) throws ServiceException;
  /**
   * 从一条sql语句里面获得一个vo对象的list集合,前提：vo的属性名集合<=resultSet包含的字段
   * @param sql eg:select * from test
   * @param voClass  对应vo的class类,
   * @return vo对象的list集合
   * @throws ServiceException
   */
  public List queryListBySql(String sql, Class voClass) throws ServiceException;
  /**
   * 从一条sql语句里面获得一个vo对象
   * 参数说明请参考queryListBySql()方法
   * @param sql
   * @param voClass
   * @param dataFields
   * @return
   * @throws ServiceException
   */
  public Object findVoBySql(String sql, Class voClass, String[] dataFields) throws ServiceException;

  /**
   * 从一条sql语句里面获得一个vo对象,前提：vo的属性名集合<=resultSet包含的字段
   * 参数说明请参考queryListBySql()方法
   * @param sql
   * @param voClass
   * @return
   * @throws ServiceException
   */
  public Object findVoBySql(String sql, Class voClass) throws ServiceException;
  
  /**
   * 批修改删除 
   * @param sql[] sql数组
   * @return  每个数组的值是对应的sql修改数
   * @throws ServiceException
   */
  public int[] batchMoreUpdate(String[] sql) throws ServiceException;
  public String call(String nt_news_id, String quote_user_id, String des_nt_id);
  
  
  public String call(String callname,String [] param);
  /**
	 * 执行函数并返回结果集
	 * example
	 * String sql =
				"begin :1 := fs_list_jsshgyxx("
					+ (String) f.get("shb_id")
					+ "); end;";
			CachedRowSet rs = mydb.exec(sql);
	 * @param sql
	 * @return
	 * @throws ServiceException
	 */
	public CachedRowSet exec(String sql) throws ServiceException;
		
}
